/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package appvideo;

import appvideo.logica.Ingreso_Gasto;
import appvideo.logica.Meses;
import java.util.Date;


public class SubMenu_gestionIngresosyGastos {
    public static void ingresos_gastos(){
        int opc_submenu=0;
        do{
            try{
                opc_submenu = ObtenerTeclado.dameEntero("\n\nSeleccione opcion:\n1.Gestion Ingresos/Gastos\n2.Balance Mensual\n3.Balance Anual\n4.Volver Atras\n5.Salir"); 
                int opc_contable =0;
                int tipo=0;//tipo=1->Ingreso;tipo=2->Gasto
                switch(opc_submenu){
                    case 1:
                        try{
                            opc_contable=ObtenerTeclado.dameEntero("\nSeleccione opcion:\n1.Ingresos\n2.Gasto");
                            do{
                                switch(opc_contable){
                                    case 1:
                                        tipo=1;
                                        break;
                                    case 2:
                                        tipo=2;
                                        break;
                                    default:
                                        break;
                                }
                            }while(opc_contable<1 || opc_contable>2);
                        }catch(NumberFormatException nme){
                            System.out.println(nme.getMessage());
                        }
                        int opc_submenu2=0;
                        boolean error=false;
                        do{
                            try{
                                String aux="";
                                if(tipo==1){
                                    aux="Ingreso";
                                }else{
                                    aux="Gasto";
                                }
                                opc_submenu2 = ObtenerTeclado.dameEntero("\nSeleccione opcion:\n1.Nuevo "+aux+"\n2.Modifica "+aux+"\n3.Visualiza "+aux+"s (por mes)\n4.Visualiza "+aux+"s (por año)\n5.Volver Atras"); 
                                switch(opc_submenu2){
                                    case 1: 
                                        //NUEVO INGRESO/GASTO
                                        Date d;
                                        String descripcion = ObtenerTeclado.dameCadenaCompleta("Introduzca una breve descripcion del "+aux+": ");
                                        double cantidad = ObtenerTeclado.dameDouble("Introduzca cantidad del "+aux+"(puede introducir decimales): ");
                                        
                                        do{
                                            d = ObtenerTeclado.dameFecha("Introduzca fecha del "+aux+"(dd/MM/yyyy):");
                                            if(d!=null){
                                                Ingreso_Gasto i = new Ingreso_Gasto(descripcion,cantidad,tipo,d);
                                                i.alta(aux);
                                            }
                                        }while(d==null);
                                        opc_submenu=0;
                                        break;
                                    case 2://MODIFICA INGRESO/GASTO
                                        error=false;
                                        do{
                                            try{
                                                int idIngreso_Gasto = ObtenerTeclado.dameEntero("Introduzca id del "+aux+" a modificar: "); 
                                                error=false;
                                                Ingreso_Gasto ig = Ingreso_Gasto.busca(idIngreso_Gasto,tipo);
                                                if(ig!=null){
                                                    int opc_menu_ing=0;
                                                    do{
                                                        opc_menu_ing = ObtenerTeclado.dameEntero("Seleccione campo a modificar:\n1.Cantidad\n2.Descripcion\n3.Tipo\n4.Fecha"
                                                                + "\n5.Volver atras(no guarda los cambios)\n6.Confirmar(guarda todos los cambios)");

                                                        switch(opc_menu_ing){
                                                            case 1:
                                                                //Cantidad
                                                                try{
                                                                    ig.setCantidad(ObtenerTeclado.dameDouble("\nIntroduzca nueva cantidad del "+aux+":"));
                                                                }catch(NumberFormatException nme){
                                                                    System.out.println("Error: "+nme.getMessage());
                                                                }
                                                                break;
                                                            case 2:
                                                                //Descripcion
                                                                    ig.setDescripcion(ObtenerTeclado.dameCadenaCompleta("\nIntroduzca nueva descripcion "+aux+":"));
                                                                break;
                                                            case 3:
                                                                //Tipo
                                                                try{
                                                                    int tipoNuevo=0;
                                                                    do{
                                                                        tipoNuevo = ObtenerTeclado.dameEntero("\nIntroduzca nuevo tipo(Ingreso=1;Gasto=2):");
                                                                    
                                                                        if(tipoNuevo==1 || tipoNuevo==2){
                                                                            ig.setTipo(tipoNuevo);
                                                                        }else{
                                                                            System.out.println("Error: El nuevo tipo solo puede ser Ingreso(1) o Gasto(2).");
                                                                        }
                                                                    }while(tipoNuevo<1 || tipoNuevo>2);
                                                                }catch(NumberFormatException nme){
                                                                    System.out.println("Error: "+nme.getMessage());
                                                                }
                                                                break;
                                                            case 4:
                                                                Date fNueva=null;
                                                                 do{
                                                                    fNueva = ObtenerTeclado.dameFecha("Introduzca fecha del "+aux+"(dd/MM/yyyy):");
                                                                    if(fNueva!=null){
                                                                        ig.setFecha(fNueva);
                                                                    }
                                                                }while(fNueva==null);
                                                                break;
                                                            case 5:
                                                                //OPCION VOLVER ATRAS
                                                                opc_submenu2=0;
                                                                break;
                                                            case 6:
                                                                //OPCION CONFIRMAR
                                                                ig.modifica();
                                                                break;
                                                            default:
                                                                break;
                                                        }
                                                    }while(opc_menu_ing!=6 && opc_menu_ing!=5);
                                                }else{
                                                    System.out.println(aux+" no encontrado en la base de datos");
                                                }
                                            }catch(NumberFormatException nme){
                                                System.out.println("Error: "+nme.getMessage());
                                                error=true;
                                            }
                                        }while(error);
                                        
                                        break;
                                    case 3:
                                        //VISUALIZA INGRESOS/GASTOS MENSUALES
                                        error=false;
                                        do{
                                            try{
                                                System.out.println("\nIntroduzca:");
                                                int mes = ObtenerTeclado.dameEntero("Numero de Mes:");
                                                int año = ObtenerTeclado.dameEntero("Año(yyyy):");
                                                if((mes>0 && mes<=12) && (año<2999 && año>=2000)){
                                                    Ingreso_Gasto.visualizaPorMes(mes,año,tipo);
                                                    error=false;
                                                }else{
                                                    System.out.println("Error con la fecha introducida: \nMes debe estar entre 1 y 12\nAño debe estar entre 2000 y 2999");
                                                    error=true;
                                                }
                                            }catch(NumberFormatException nme){
                                                System.out.println("Error: "+nme.getMessage());
                                                error=true;
                                            }
                                        }while(error);
                                        break;
                                    case 4:
                                        //VISUALIZA INGRESOS/GASTOS ANUALES
                                        error=false;
                                        do{
                                            try{
                                                System.out.println("\nIntroduzca:");
                                                int año = ObtenerTeclado.dameEntero("Año(yyyy):");
                                                if(año<2999 && año>=2000){
                                                    Ingreso_Gasto.visualizaPorAño(año,tipo);
                                                    error=false;
                                                }else{
                                                    System.out.println("Error con la fecha introducida: \nAño debe estar entre 2000 y 2999");
                                                    error=true;
                                                }
                                            }catch(NumberFormatException nme){
                                                System.out.println("Error: "+nme.getMessage());
                                                error=true;
                                            }
                                        }while(error);
                                        break;
                                    case 5:
                                        //VOLVER ATRAS
                                        opc_submenu=0;
                                        break;
                                }
                            }catch(NumberFormatException nme){
                                System.out.println(nme.getMessage());
                            }
                    }while(opc_submenu2<1 || opc_submenu2>5);
                        opc_submenu=0;
                        break;
                    case 2:
                        //BALANCE MENSUAL
                        error=false;
                        do{
                            try{
                                System.out.println("\nIntroduzca:");
                                int mes = ObtenerTeclado.dameEntero("Numero de Mes:");
                                int año = ObtenerTeclado.dameEntero("Año(yyyy):");
                                if((mes>0 && mes<=12) && (año<2999 && año>=2000)){
                                    double ingresosMensuales = Ingreso_Gasto.balanceMensual(mes,año,1);
                                    double gastosMensuales = Ingreso_Gasto.balanceMensual(mes,año,2);
                                    System.out.println("\n"+Meses.Mes(mes)+" de "+año);
                                    System.out.println("Ingresos: "+ingresosMensuales+" €");
                                    System.out.println("Gastos: "+gastosMensuales+" €");
                                    System.out.printf("\nBalance Mensual: %.2f €",(ingresosMensuales-gastosMensuales));
                                    error=false;
                                }else{
                                    System.out.println("Error con la fecha introducida: \nMes debe estar entre 1 y 12\nAño debe estar entre 2000 y 2999");
                                    error=true;
                                }
                            }catch(NumberFormatException nme){
                                System.out.println("Error: "+nme.getMessage());
                                error=true;
                            }
                        }while(error);
                        opc_submenu=0;
                        break;
                    case 3:
                        //BALANCE ANUAL
                        error=false;
                        do{
                            try{
                                System.out.println("\nIntroduzca:");
                                int año = ObtenerTeclado.dameEntero("Año(yyyy):");
                                if(año<2999 && año>=2000){
                                    double ingresosAnuales = Ingreso_Gasto.balanceAnual(año,1);
                                    double gastosAnuales = Ingreso_Gasto.balanceAnual(año,2);
                                    System.out.println("\nAño: "+año);
                                    System.out.println("Ingresos: "+ingresosAnuales+" €");
                                    System.out.println("Gastos: "+gastosAnuales+" €");
                                    System.out.printf("\nBalance Anual: %.2f €",(ingresosAnuales-gastosAnuales));
                                    error=false;
                                }else{
                                    System.out.println("Error con la fecha introducida: \nAño debe estar entre 2000 y 2999");
                                    error=true;
                                }
                            }catch(NumberFormatException nme){
                                System.out.println("Error: "+nme.getMessage());
                                error=true;
                            }
                        }while(error);
                        opc_submenu=0;
                        break;
                    case 4:
                        //Volver atrás->A menu principal
                        //Se pone a 0 la opcion del menu superior para no
                        //salir del todo
                        main.opc=0;
                        break;
                    case 5:
                        //SALIR
                        break;
                }
            }catch(NumberFormatException nme){
                System.out.println("Error: "+nme.getMessage());
            }catch(Exception e){
                System.out.println("Error: "+e.getMessage());
            }
        }while(opc_submenu<1 || opc_submenu>5);
    }
}
